import Vue from 'vue'
import {
	formatNumber,
	isEmpty
} from '@/api/productApi/file'

// 页面初始化时，生成下属基金数据对象数据结构
export function initComple(data, _this) {
	data.rateInfo.feeRateInfoList.forEach(item => { // 将必要字段值为null的置于空
		if (['7', '8', '9'].includes(item.feeRateType)) {
			if (!item.remark) {
				Vue.set(item, 'remark', '')
			}
			if (!item.feeRateUnit) {
				Vue.set(item, 'feeRateUnit', '1')
			}
			if (!item.feeRate) {
				Vue.set(item, 'feeRate', '')
			}
		} else {
			if (!item.feeRateUnit) {
				Vue.set(item, 'feeRateUnit', '1')
			}
			if (!item.feeRate) {
				Vue.set(item, 'feeRate', '')
			}
			if (item.feeRateType === '5') {
				if (!item.belongFundRatioUnit) {
					Vue.set(item, 'belongFundRatioUnit', '1')
				}
			}
		}
	})
	const tureeRatee = jsonArray(data.rateInfo.feeRateInfoList)
	_this.manageRate = tureeRatee.filter(item => item.feeRateType === '9') // 管理费率
	_this.trusteeRate = tureeRatee.filter(item => item.feeRateType === '7') // 托管费率
	_this.rateInfo = jsonArray(data.rateInfo)
	_this.timePoint = _this.rateInfo.accrualPointTime ? _this.rateInfo.accrualPointTime.split(',') : []

	data.baseInfo.RateList = [] // 存储费率
	if (data.baseInfo.branchShareList.length) {
		data.baseInfo.branchShareList.forEach(items => {
			if (items.subFundType === '1') { // A类下属基金
				const obj = {}
				obj.rearRndRatee = false // 控制是否展示后端费率
				obj.SubordinateFunds = true // 是否下属金
				obj.subRateMsg = '' // 普通认购非法提示
				obj.subCntMsg = '' // 通过直销中心认购非法提示
				obj.applyRateMsg = '' // 前端-普通申购非法提示
				obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
				obj.applyCntMsg = '' // 前端-通过直销中心申购非法提示
				obj.rearRndApplyCntMsg = '' // 后端-通过直销中心申购非法提示
				obj.ransomRateMsg = '' // 普通赎回非法提示
				obj.fundCode = items.fundCode // 下属基金代码
				obj.fundGradFullName = items.fundGradFullName // 下属基金全称
				obj.fundGradName = items.fundGradName // 下属基金简称
				obj.subFundType = items.subFundType // 下属基金类别
				obj.branchSalesSerivceRate = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '8' && items.subFundType === item.subFundType) // 销售服务费率,
				obj.subRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '1' && items.subFundType === item.subFundType) // 普通认购费率列表
				obj.subCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '2' && items.subFundType === item.subFundType) // 通过直销中心认购的养老金客户列表
				obj.applyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '3' && items.subFundType === item.subFundType) // 前端-普通申购
				obj.rearRndApplyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '10' && items.subFundType === item.subFundType) // 后端-普通申购
				obj.applyCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '4' && items.subFundType === item.subFundType) // 前端-通过直销中心申购的养老金客户
				obj.rearRndApplyCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '11' && items.subFundType === item.subFundType) // 后端-通过直销中心申购的养老金客户
				obj.ransomRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '5' && items.subFundType === item.subFundType) // 普通赎回
				data.baseInfo.RateList.push(jsonArray(obj))
			} else {
				const obj = {}
				obj.subRateMsg = '' // 普通认购非法提示
				obj.applyRateMsg = '' // 前端-普通申购非法提示
				obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
				obj.ransomRateMsg = '' // 普通赎回非法提示
				obj.rearRndRatee = false // 控制是否展示后端费率
				obj.SubordinateFunds = true // 是否下属金
				obj.fundCode = items.fundCode // 下属基金代码
				obj.fundGradFullName = items.fundGradFullName // 下属基金全称
				obj.fundGradName = items.fundGradName // 下属基金简称
				obj.subFundType = items.subFundType // 下属基金类别
				obj.branchSalesSerivceRate = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '8' && items.subFundType === item.subFundType) // 销售服务费率,
				obj.subRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '1' && items.subFundType === item.subFundType) // 普通认购费率列表
				obj.applyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '3' && items.subFundType === item.subFundType) // 前端-普通申购
				obj.rearRndApplyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '10' && items.subFundType === item.subFundType) // 后端-普通申购
				obj.ransomRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '5' && items.subFundType === item.subFundType) // 普通赎回
				data.baseInfo.RateList.push(jsonArray(obj))
			}
		})
	} else {
		const obj = {}
		obj.rearRndRatee = false // 控制是否展示后端费率
		obj.SubordinateFunds = false // 是否下属金
		obj.subRateMsg = '' // 普通认购非法提示
		obj.subCntMsg = '' // 通过直销中心认购非法提示
		obj.applyRateMsg = '' // 前端-普通申购非法提示
		obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
		obj.applyCntMsg = '' // 前端-通过直销中心申购非法提示
		obj.rearRndApplyCntMsg = '' // 后端-通过直销中心申购非法提示
		obj.ransomRateMsg = '' // 普通赎回非法提示
		obj.subFundType = '' // 基金类别
		obj.branchSalesSerivceRate = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '8') // 销售服务费率,
		obj.subRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '1') // 普通认购费率列表
		obj.subCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '2') // 通过直销中心认购的养老金客户列表
		obj.applyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '3') // 前端-普通申购
		obj.rearRndApplyRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '10') // 后端-普通申购
		obj.applyCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '4') // 前端-通过直销中心申购的养老金客户
		obj.rearRndApplyCntList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '11') // 后端-通过直销中心申购的养老金客户
		obj.ransomRateList = data.rateInfo.feeRateInfoList.filter(item => item.feeRateType === '5') // 普通赎回
		data.baseInfo.RateList.push(jsonArray(obj))
	}

	return data.baseInfo
}

// 提交时，合并费率
export function mergeRate(_this) {
	const feeRateInfoList = [] // 费率列表
	_this.baseData.RateList.forEach(item => {
		if (item.subFundType === '1' || !item.subFundType) {
			const subCntList = jsonArray(item.subCntList)
			feeRateInfoList.push(...subCntList.splice(0, 4)) // 通过直销中心认购的养老金客户列表
			const applyCntList = jsonArray(item.applyCntList)
			feeRateInfoList.push(...applyCntList.splice(0, 4)) // 前端-通过直销中心申购的养老金客户
			const rearRndApplyCntList = jsonArray(item.rearRndApplyCntList)
			feeRateInfoList.push(...rearRndApplyCntList.splice(0, 4)) // 后端-通过直销中心申购的养老金客户
		}
		const subRateList = jsonArray(item.subRateList)
		feeRateInfoList.push(...subRateList.splice(0, 4)) // 普通认购费率列表
		const applyRateList = jsonArray(item.applyRateList)
		feeRateInfoList.push(...applyRateList.splice(0, 4)) // 前端-普通申购
		const rearRndApplyRateList = jsonArray(item.rearRndApplyRateList)
		feeRateInfoList.push(...rearRndApplyRateList.splice(0, 4)) // 后端-普通申购
		const ransomRateList = jsonArray(item.ransomRateList)
		feeRateInfoList.push(...ransomRateList.splice(0, 6)) // 普通赎回
		const branchSalesSerivceRate = jsonArray(item.branchSalesSerivceRate)
		feeRateInfoList.push(...branchSalesSerivceRate.splice(0, 1)) // 下属基金销售服务费率
	})
	const manageRate = jsonArray(_this.manageRate)
	feeRateInfoList.push(...manageRate.splice(0, 1)) // 管理费率
	const trusteeRate = jsonArray(_this.trusteeRate)
	feeRateInfoList.push(...trusteeRate.splice(0, 1)) // 托托管费率
	feeRateInfoList.forEach(item => {
		if (['1', '2', '3', '4'].includes(item.feeRateType)) {
			item.itemSign = 'M'
		}
		if (['5', '6', '10', '11'].includes(item.feeRateType)) {
			item.itemSign = 'N'
		}
	})
	return feeRateInfoList
}

// 改变下属基金列表时，补全费率数据
// items 下属基金数据  subFundType下属基金类型
/*
fundData 下属基金数据
subFundType 下属基金类型
*/
export function CompletionUpdate(items, subFundType) {
	const obj = {}

	if (!subFundType) { // 无下属基金
		obj.rearRndRatee = false // 控制是否展示后端费率
		obj.SubordinateFunds = false // 是否下属金
		obj.subRateMsg = '' // 普通认购非法提示
		obj.subCntMsg = '' // 通过直销中心认购非法提示
		obj.applyRateMsg = '' // 前端-普通申购非法提示
		obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
		obj.applyCntMsg = '' // 前端-通过直销中心申购非法提示
		obj.rearRndApplyCntMsg = '' // 后端-通过直销中心申购非法提示
		obj.ransomRateMsg = '' // 普通赎回非法提示
		obj.subFundType = '' // 基金类别
		obj.branchSalesSerivceRate = spliceIsPush('', '8', '', 1) // 销售服务费率,
		obj.subRateList = spliceIsPush('', '1', '', 4) // 普通认购费率列表
		obj.subCntList = spliceIsPush('', '2', '', 4) // 通过直销中心认购的养老金客户列表
		obj.applyRateList = spliceIsPush('', '3', '', 4) // 前端-普通申购
		obj.rearRndApplyRateList = spliceIsPush('', '10', '', 4) // 后端-普通申购
		obj.applyCntList = spliceIsPush('', '4', '', 4) // 前端-通过直销中心申购的养老金客户
		obj.rearRndApplyCntList = spliceIsPush('', '11', '', 4) // 后端-通过直销中心申购的养老金客户
		obj.ransomRateList = spliceIsPush('', '5', '', 6) // 普通赎回
	} else if (subFundType === '1') { // 下属基金是A类基金
		obj.rearRndRatee = false // 控制是否展示后端费率
		obj.SubordinateFunds = true // 是否下属金
		obj.subRateMsg = '' // 普通认购非法提示
		obj.subCntMsg = '' // 通过直销中心认购非法提示
		obj.applyRateMsg = '' // 前端-普通申购非法提示
		obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
		obj.applyCntMsg = '' // 前端-通过直销中心申购非法提示
		obj.rearRndApplyCntMsg = '' // 后端-通过直销中心申购非法提示
		obj.ransomRateMsg = '' // 普通赎回非法提示
		obj.fundCode = items.fundCode // 下属基金代码
		obj.fundGradFullName = items.fundGradFullName // 下属基金全称
		obj.fundGradName = items.fundGradName // 下属基金简称
		obj.subFundType = items.subFundType // 下属基金类别
		obj.branchSalesSerivceRate = spliceIsPush('1', '8', items.fundCode, 1) // 销售服务费率,
		obj.subRateList = spliceIsPush('1', '1', items.fundCode, 4) // 普通认购费率列表
		obj.subCntList = spliceIsPush('1', '2', items.fundCode, 4) // 通过直销中心认购的养老金客户列表
		obj.applyRateList = spliceIsPush('1', '3', items.fundCode, 4) // 前端-普通申购
		obj.rearRndApplyRateList = spliceIsPush('1', '10', items.fundCode, 4) // 后端-普通申购
		obj.applyCntList = spliceIsPush('1', '4', items.fundCode, 4) // 前端-通过直销中心申购的养老金客户
		obj.rearRndApplyCntList = spliceIsPush('1', '11', items.fundCode, 4) // 后端-通过直销中心申购的养老金客户
		obj.ransomRateList = spliceIsPush('1', '5', items.fundCode, 6) // 普通赎回
	} else { // 下属基金不是A类基金
		obj.subRateMsg = '' // 普通认购非法提示
		obj.applyRateMsg = '' // 前端-普通申购非法提示
		obj.rearRndApplyRateMsg = '' // 后端-普通申购非法提示
		obj.ransomRateMsg = '' // 普通赎回非法提示
		obj.rearRndRatee = false // 控制是否展示后端费率
		obj.SubordinateFunds = true // 是否下属金
		obj.fundCode = items.fundCode // 下属基金代码
		obj.fundGradFullName = items.fundGradFullName // 下属基金全称
		obj.fundGradName = items.fundGradName // 下属基金简称
		obj.subFundType = items.subFundType // 下属基金类别
		obj.branchSalesSerivceRate = spliceIsPush(items.subFundType, '8', items.fundCode, 1) // 销售服务费率,
		obj.subRateList = spliceIsPush(items.subFundType, '1', items.fundCode, 4) // 普通认购费率列表
		obj.applyRateList = spliceIsPush(items.subFundType, '3', items.fundCode, 4) // 前端-普通申购
		obj.rearRndApplyRateList = spliceIsPush(items.subFundType, '10', items.fundCode, 4) // 后端-普通申购
		obj.ransomRateList = spliceIsPush(items.subFundType, '5', items.fundCode, 6) // 普通赎回
	}

	return jsonArray(obj)
}

export function jsonArray(list) { // 将数组序列化
	return JSON.parse(JSON.stringify(list))
}

// 处理费率数组
// subFundType 下属基金类型
// rateType 费率类型
// fundCode 基金代码
// type 数组长度类型
function spliceIsPush(subFundType, rateType, fundCode, type) {
	const rateArray = []

	if (type === 4) { // 长度为4的类型的数组
		for (let i = 0; i < 4; i++) {
			let j = 1
			j += i
			const obj = {
				feeRateType: rateType,
				feeRateId: `${j}`,
				startSection: '',
				endSection: '',
				feeRate: '',
				feeRateUnit: '1'
			}
			rateArray.push(jsonArray(obj))
		}
	} else if (type === 6) { // 长度为6的类型的数组
		for (let i = 0; i < 6; i++) {
			let j = 1
			j += i
			const obj = {
				feeRateType: rateType,
				feeRateId: `${j}`,
				startSection: '',
				endSection: '',
				feeRate: '',
				feeRateUnit: '1',
				belongFundRatio: '',
				belongFundRatioUnit: '1'
			}
			rateArray.push(jsonArray(obj))
		}
	} else if (type === 1) {
		for (let i = 0; i < 1; i++) {
			let j = 1
			j += i
			const obj = {
				feeRateType: rateType,
				feeRateId: `${j}`,
				startSection: '',
				endSection: '',
				feeRate: '',
				feeRateUnit: '1'
			}
			rateArray.push(jsonArray(obj))
		}
	}
	rateArray.forEach(item => {
		if (subFundType) {
			item.subFundType = subFundType
		}
		if (fundCode) {
			item.fundCode = fundCode
		}
	})

	return JSON.parse(JSON.stringify(rateArray))
}

// list 验证的费率数组
// obj 该基金所有费率信息
// msg 费率非法提示字段
export function RateVerification(list, msg, obj) {
	let eFlag = true
	let feeRateFlag = true
	let thanFlag = true
	let startFlag = true
	let belongFundRatioFlag = true
	for (let i = 0; i < list.length; i++) { //
		if (i === 0) { // 第一行
			if (!['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg)) {
				// 第一行判断区间末位和费率是否为空
				if (isEmpty(list[i].endSection) && isEmpty(list[i].feeRate)) { // 为空
					list[i].startSection = ''
					list[i].feeRate = ''
				} else { // 不为空
					list[i].startSection = '0'
				}
			} else if (isEmpty(list[i].startSection)) {
				startFlag = false
			}
		} else {
			// 上一行区间末位如果为E或者为空，则该行区间始位为空，否则为上一行区别末位值
			list[i].startSection = (list[i - 1].endSection === 'E' || list[i - 1].endSection === '') ? '' : list[i - 1].endSection
			// 循环判断该行的前几行是否有E或者为空
			let flag = false
			for (let j = i; j > 0; j--) {
				if (list[j - 1].endSection === 'E' || isEmpty(list[j - 1].endSection)) {
					list[j].endSection = ''
					list[j].feeRate = ''
					if (['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg)) {
						list[j].belongFundRatio = ''
					}
				}
				// 判断前面的行中是否有E
				if (list[j - 1].endSection === 'E') {
					flag = true
				}
				// 判断大小
				if (!['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg) && !isEmpty(list[j].startSection) && !isEmpty(list[j].endSection)) {
					if (list[j].endSection === 'E') { // 判断当前行是否等于E
						if (j - 2 >= 0 && Number(list[j - 1].endSection) <= Number(list[j - 2].endSection)) {
							thanFlag = false
						}
					} else {
						if (j - 1 >= 0 && Number(list[j].endSection) <= Number(list[j - 1].endSection)) {
							thanFlag = false
						}
					}
				}
			}
			// 如果没有并且为最后一行并且前一行不为空，则将最后一行区间末位设置为E
			if (i === list.length - 1 && !isEmpty(list[i - 1].endSection) && !flag) {
				list[i].endSection = 'E'
			}
		}
		// 判断是否有正无穷
		if (list[i].endSection === 'E') {
			eFlag = false
		}
		// 判断费率是否为空
		if (!isEmpty(list[i].startSection) && !isEmpty(list[i].endSection) && isEmpty(list[i].feeRate)) {
			feeRateFlag = false
		}
		if (msg === 'ransomRateMsg' && !isEmpty(list[i].startSection) && !isEmpty(list[i].endSection) && !isEmpty(list[i].feeRate) && isEmpty(list[i].belongFundRatio)) {
			belongFundRatioFlag = false
		}
	}

	if (!startFlag) {
		obj[msg] = '第一行区间起始位不能为空！'
	}
	if (!thanFlag) {
		obj[msg] = '区间末位应大于区间起始位！'
	}
	if (!feeRateFlag) {
		obj[msg] = '费率不能为空！'
	}
	if (eFlag) {
		obj[msg] = '正无穷 必填！'
	}
	if (!belongFundRatioFlag) {
		obj[msg] = '归基金资产比例不能为空！'
	}
	// (没有E&&费率为空)||第一行为空则显示信息置为空
	if (
		(!eFlag &&
			feeRateFlag &&
			thanFlag &&
			startFlag &&
			belongFundRatioFlag) ||
		(isEmpty(list[0].startSection) && isEmpty(list[0].endSection) && isEmpty(list[0].feeRate) && (!['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg) ||
			(['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg) && isEmpty(list[0].belongFundRatio))))
	) {
		obj[msg] = ''
	}
}

export function valueCheckByRule(list, msg) {
	for (let i = 0; i < list.length; i++) {
		if (!['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg) && !!list[i].startSection) {
			list[i].startSection = formatNumber(list[i].startSection)
		}
		if (!['rearRndApplyRateMsg', 'rearRndApplyCntMsg', 'ransomRateMsg'].includes(msg) && !!list[i].endSection && list[i].endSection !== 'E') { // E代表费率结尾
			list[i].endSection = formatNumber(list[i].endSection)
		}
		if (list[i].feeRate) {
			list[i].feeRate = formatNumber(list[i].feeRate)
		}
	}
}
